import { defineStore } from "pinia";
import { getCurrentUser } from "@/api/getCurrentUserRequest";
import { ref } from "vue";

// 定义用户信息的接口
interface User {
  userName: string;
  // 可以根据实际情况添加更多属性
}

// 定义响应数据的接口
interface ResponseData<T> {
  code: number;
  data: T;
}

export const useLoginUserStore = defineStore("loginUser", () => {
  // 使用User接口精确标注loginUser的类型
  const loginUser = ref<User>({
    userName: "未登录",
  });

  //远程获取登录用户信息
  async function fetchLoginUser() {
    // 定义params，虽然是固定值，但类型标注更明确
    const params: {
      username: number;
      password: number;
    } = {
      username: 123,
      password: 123,
    };
    try {
      // 模拟后端返回数据，这里直接构造一个符合ResponseData结构的数据
      const res: ResponseData<User> = {
        code: 0,
        data: {
          userName: "模拟用户",
        },
      };
      // 这里原本是调用接口获取数据，实际使用时需要移除模拟数据的部分
      // const res = await getCurrentUser(params);
      if (res.code === 0 && res.data) {
        loginUser.value = res.data;
      }
    } catch (error) {
      console.error("获取用户信息失败", error);
    }
  }

  //单独设置信息，参数类型使用User接口
  function setLoginUser(newLoginUser: User) {
    loginUser.value = newLoginUser;
  }

  return { loginUser, fetchLoginUser, setLoginUser };
});
